home *** CD-ROM | disk | FTP | other *** search
/ Compute! Gazette 1992 June / 1992-06.d64 / pad design (.txt) < prev    next >
Commodore BASIC  |  2022-09-20  |  5KB  |  132 lines

  1. 0 clr
  2. 10 rem copyright 1992 compute publications intl ltd - all rights reserved
  3. 100 rem ***  initialize  ***
  4. 110 hd$="          pad design         ":deffnpm(x)=10^(1-(x<1)+(x>1000))
  5. 120 cc$(1)=" ":cc$(2)="[159]results with new 'r' values[154]"
  6. 130 lo$(1)="insertion loss":lo$(2)="minimum-loss"
  7. 140 an$(1)="t or h ":an$(2)="[255] or o ":an$(3)="min-loss"
  8. 150 poke783,peek(783)and254:poke53281,0:poke53280,0
  9. 160 rem ***  main menu  ***
  10. 170 print"[147]";:fori=1to40:print" ";:next
  11. 180 print""tab(5)hd$
  12. 190 ro=3:co=5:gosub1150:print"select:":co=10:fori=1to3
  13. 200 ro=ro+2:gosub1150:printi" - "an$(i):next
  14. 210 input"choice:";p$:ifp$<"1"orp$>"3"then210
  15. 220 ph=1
  16. 230 input"enter input  impedance";zi:ifzi=0 thengosub1260:goto230
  17. 240 input"enter output impedance";zo:ifzo=0thengosub1260:goto240
  18. 250 ifp$="3"andzo=zithenprint"min-loss is to match z's":goto1210
  19. 260 ifp$="3"then300
  20. 270 input"enter attenuation in db.";at
  21. 280 ifat=0then1250
  22. 290 n=exp(log(10)*at/10)
  23. 300 onval(p$)goto310,440,570
  24. 310 rem ***  calc for t or h   ***
  25. 320 r3=2*sqr(zi*zo*n)/(n-1)
  26. 330 r1=zi*(n+1)/(n-1)-r3:r1=int(fnpm(r1)*r1+.5)/fnpm(r1)
  27. 340 r2=zo*(n+1)/(n-1)-r3:r2=int(fnpm(r2)*r2+.5)/fnpm(r2)
  28. 350 r3=int(fnpm(r3)*r3+.5)/fnpm(r3)
  29. 360 ifsgn(r2)=-1then1230
  30. 370 ra=r1:rb=r2:rc=r3
  31. 380 goto690
  32. 390 za=(zo+r2)*r3/(zo+r2+r3)+r1:za=int(fnpm(za)*za+.5)/fnpm(za)
  33. 400 zb=(zi+r1)*r3/(zi+r1+r3)+r2:zb=int(fnpm(zb)*zb+.5)/fnpm(zb)
  34. 410 vl=1/((zo+r2)*r3/((zo+r2+r3)*za)*zo/(zo+r2))
  35. 420 at=int(100*(20*log(vl)/log(10)-10*log(za/zo)/log(10))+.5)/100
  36. 430 goto690
  37. 440 rem ***  calc for ' or o   ***
  38. 450 r3=(n-1)/2*sqr(zi*zo/n)
  39. 460 r1=1/(1/zi*(n+1)/(n-1)-(1/r3)):r1=int(fnpm(r1)*r1+.5)/fnpm(r1)
  40. 470 r2=1/(1/zo*(n+1)/(n-1)-(1/r3)):r2=int(fnpm(r2)*r2+.5)/fnpm(r2)
  41. 480 r3=int(fnpm(r3)*r3+.5)/fnpm(r3)
  42. 490 ifsgn(r1)=-1then1230
  43. 500 ra=r1:rb=r2:rc=r3
  44. 510 goto870
  45. 520 oz=zo*r2/(zo+r2):iz=zi*r1/(zi+r1)
  46. 530 za=(oz+r3)*r1/(oz+r1+r3):za=int(fnpm(za)*za+.5)/fnpm(za)
  47. 540 zb=(iz+r3)*r2/(iz+r2+r3):zb=int(fnpm(zb)*zb+.5)/fnpm(zb)
  48. 550 at=int(100*(20*log((oz+r3)/oz)/log(10)-10*log(za/zo)/log(10))+.5)/100
  49. 560 goto870
  50. 570 rem ***  calc for min-loss  ***
  51. 580 ifzo>zithenz=zi:zi=zo:zo=z
  52. 590 r3=zo/sqr(1-(zo/zi)):r3=int(fnpm(r3)*r3+.5)/fnpm(r3)
  53. 600 r1=zi*sqr(1-(zo/zi)):r1=int(fnpm(r1)*r1+.5)/fnpm(r1)
  54. 610 za=zi
  55. 620 ra=r1:rb=r2:rc=r3
  56. 630 goto660
  57. 640 za=zo*r3/(zo+r3)+r1:za=int(fnpm(za)*za+.5)/fnpm(za)
  58. 650 zb=(zi+r1)*r3/(zi+r1+r3):zb=int(fnpm(zb)*zb+.5)/fnpm(zb)
  59. 660 vl=za/(zo*r3/(zo+r3))
  60. 670 at=int(100*(20*log(vl)/log(10)-10*log(za/zo)/log(10))+.5)/100
  61. 680 goto1000
  62. 690 rem ***  display t network  ***
  63. 700 print"[147]"hd$"  "an$(1)
  64. 710 printtab(5)cc$(ph)
  65. 720 printtab(49)"[195][195][195][195]   [154][146][195][195][178][195][195]   [154][146][195][195][195]"
  66. 730 printtab(10)"        [194]"
  67. 740 printtab(10)"   r1    [154][146]    r2"
  68. 750 printtab(10)"         [154][146] r3"
  69. 760 printtab(10)"         [154][146]"
  70. 770 printtab(10)"   [164][164][164][154]  [194]  [164][164][164][154]"
  71. 780 printtab(9)"[195][195][195][195][195][195][195][195][195][177][195][195][195][195][195][195][195][195]"
  72. 790 printtab(10)"   [163]^[163][154]     [163]^[163][154]"
  73. 800 print"^ note: if balanced h then r1 & r2"
  74. 810 print"        are halved."
  75. 820 print"r1="r1tab(15)"r2="r2tab(30)"r3="r3
  76. 830 ro=5:co=3:gosub1150:ifph=1thenprint"zi"zitab(30)"zo"zo:goto850
  77. 840 print"zi[159]"zatab(30)"[154]zo"zo:ro=7:gosub1150:print"  "zitab(30)"  [159]"zb"[154]"
  78. 850 ro=11:co=10:gosub1150:printlo$(int(val(p$)/2+.5));at" db"
  79. 860 goto1160
  80. 870 rem ***  display (NULL) network  ***
  81. 880 print"[147]"hd$"  "an$(2)
  82. 890 printtab(5)cc$(ph)
  83. 900 printtab(50)"[195][195][195][195][195][178][195][195]   [146][154][195][195][178][195][195][195][195]"
  84. 910 printtab(10)"     [194]       [194]"
  85. 920 printtab(10)"      [146][154]   r3   [146][154]"
  86. 930 printtab(10)"      [146][154] r1     [146][154] r2"
  87. 940 printtab(10)"      [146][154]        [146][154]"
  88. 950 printtab(10)"     [194]  [164][164][164][154]  [194]"
  89. 960 printtab(10)"[195][195][195][195][195][177][195][195][195][195][195][195][195][177][195][195][195][195]"
  90. 970 printtab(10)"        [163]^[163][154]"
  91. 980 print"^ note: if balanced o then r3 is halved"
  92. 990 goto820
  93. 1000 rem ***  display min-loss  ***
  94. 1010 print"[147]"hd$"  "an$(3)
  95. 1020 printtab(5)cc$(ph)
  96. 1030 printtab(49)"[195][195][195][195]   [154][146][195][195][178][195][195][195][195][195][195][195][195]"
  97. 1040 printtab(10)"        [194]"
  98. 1050 printtab(10)"   r1    [154][146]"
  99. 1060 printtab(10)"         [154][146] r3"
  100. 1070 printtab(10)"         [154][146]"
  101. 1080 printtab(10)"   [164][164][164][154]  [194]"
  102. 1090 printtab(9)"[195][195][195][195][195][195][195][195][195][177][195][195][195][195][195][195][195][195]"
  103. 1100 printtab(10)"   [163]^[163][154]"
  104. 1110 print"^ note: if balanced then r1 is halved."
  105. 1120 print"r1="r1tab(30)"r3="r3
  106. 1130 goto830
  107. 1140 rem *** sub-rtes ***
  108. 1150 poke781,ro:poke782,co:sys65520:return
  109. 1160 ro=22:co=0:gosub1150:print"[159]1-enter new r values    2-menu    3-quit[154]"
  110. 1170 geta$:ifa$<>"1"anda$<>"2"anda$<>"3"then1170
  111. 1180 ifa$="2"then160
  112. 1190 ifa$="3"thenprint"[147]":poke53281,6:poke53280,14:end
  113. 1200 print"[147]":gosub1270:onval(p$)goto390,520,640
  114. 1210 print"[159]hit shift to redo[154]":wait653,1:goto160
  115. 1220 print"value entered is > or < than 20% of":printtab(10)r:return
  116. 1230 print"the insertion loss is < min.loss -"
  117. 1240 print"     redo or choose min.loss":goto1210
  118. 1250 print" some insertion loss must exist ":goto1210
  119. 1260 print" some impedance must exist ":return
  120. 1270 rem *** get new r values ***
  121. 1280 ro=4:co=5:gosub1150:print"[159]return[146] only for original r value[154]"
  122. 1290 ph=2:r1$="":r2$="":r3$=""
  123. 1300 input"enter new r1 value";r1$:r1=val(r1$):ifr1$=""thenr1=ra:goto1320
  124. 1310 ifabs(val(r1$)-ra)>.2*rathenr=ra:r1$="":gosub1220:goto1300
  125. 1320 ifp$="3"then1350
  126. 1330 input"enter new r2 value";r2$:r2=val(r2$):ifr2$=""thenr2=rb:goto1350
  127. 1340 ifabs(val(r2$)-rb)>.2*rbthenr=rb:r2$="":gosub1220:goto1330
  128. 1350 input"enter new r3 value";r3$:r3=val(r3$):ifr3$=""thenr3=rc:goto1370
  129. 1360 ifabs(val(r3$)-rc)>.2*rcthenr=rc:r3$="":gosub1220:goto1350
  130. 1370 ifr1=raandr2=rbandr3=rcthenph=1
  131. 1380 return
  132.